The present invention relates generally to synchronizing data among multiple computing devices or processes, and more specifically, to a software architecture for synchronizing data among multiple computing devices or processes in a manner transparent to application programs that access the synchronized data.
Handheld devices and portable computers are becoming increasingly more powerful and functional devices. Many handheld devices are now multifunction devices with multiple device roles including: personal digital assistant (PDA), cellular phone, portable media player, voice recorder, video recorder, global positioning system (GPS), camera, and electronic file storage. Similarly, portable computers now have increased functionality and mobility. Because of these improvements in handheld devices and portable computers, data is commonly shared among multiple handheld devices and portable computers, with multiple devices accessing and modifying shared data files.
Additionally, advances in wireless Internet coverage and in wireless network capabilities made a broad range of data (such as electronic files, image files, audio files and video files) accessible to mobile communication devices, laptop computers, and other types of portable communication systems. Network improvements have also allowed electronic data to be accessed and modified from virtually any location. This combination of improved wireless network access and improved portable device functionality has caused users increasingly to access and modify electronic data from multiple, often widely separated, locations using multiple different portable devices.
Because multiple devices can access and modify the same data, the different data modifications should be synchronized to ensure the each device accesses the most recent version of the data. For example, a user may use one portable device to edit an electronic document in one location, and later use a different portable device to access the same electronic document from a different location. Synchronization ensures that the electronic document accessed by the second portable device includes the modifications made using the first portable device. Synchronization is also used where a multiple users can access and modify the same data from multiple devices in various locations, requiring the data to be synchronized among the multiple computing devices.
In developing any application program that uses data synchronized among multiple devices, application program developers are given the task of developing synchronization schemes for synchronizing the data associated with an application program. Designing and programming algorithms for synchronizing the data involves developing data structures and schemes to resolve conflicts associated with the synchronized data. Depending on the complexity of the handheld device or portable computers, developing the algorithms for data synchronizing can become a task taking up significant amount of time and resource of the application program developers.
Further, the synchronization algorithm of the application program may also be prone to errors once deployed on the handheld devices or portable computers due to incompatibility with other applications using the same or different synchronization schemes. As the number of application programs and the number of corollary components for performing synchronization increase, the handheld devices or portable computers are more likely to encounter conflicts or errors during the synchronization operations. Absent careful designing by the application programmers, the errors during the synchronization operations can result in corruption of the data or deadlocks among different application programs.
Also, different data synchronization schemes used by different application may lead to wasted resources of the handheld device or portable computers. Each application program uses different or separate software components, data structure, and communication sessions for the data synchronization. Therefore, the amount of resources for data synchronization must be increased as the number of installed application programs is increased. Using multiple software components, data structure and communication sessions results in inefficient use of the resources.
Therefore, there is a need for a method that facilitates the application developers, including third parties, to develop the application programs that need data synchronization. There is also a need for a synchronization method that is transparent to the application programs that use the synchronized data. There is also a need to provide a data synchronization scheme that reduces errors associated with the synchronization operations. There is also a need for a data synchronization scheme that efficiently uses the resources of the computing devices.